长任务长会话:AI自动总结dowhat技能
扩展节。解决一个所有AI协作开发者都会撞上的问题:窗口多了、会话长了之后,你 自己不记得每个会话之前聊了什么、做到哪了。
问题:会话失忆不只发生在AI身上
多窗口并行开发(上一节的工作流)跑起来之后,很快会遇到三个现象:
- 切回某个窗口,想不起这个会话之前和模型聊了什么、约束过什么
- 长会话触发了自动的上下文压缩,关键信息(比如某个样式约定、某个待办)被压缩掉了
- 装了记忆类插件(如 claude-mem)能缓解"AI 记不住",但我们自己记不住的问题没人解决
直接问模型"你之前的会话完成了哪些东西,帮我总结一下"当然可以,但每次都要重新描述一遍意图、格式也不稳定。这种高频重复的指令,就是该做成 skill 的信号——一次定义,/dowhat 一条命令随取随用。
创建 /dowhat skill
用 skill-creator 创建本项目的本地 skill(创建位置注意是 .claude/skills/ 目录,第一次容易误建到仓库根目录,发现位置不对直接让它挪走)。给它的描述直接决定日后怎么触发:
创建一个本地的 skill,本项目的 skill,名字叫 dowhat:
收集当前会话相关的历史记录并总结。用于长会话、多窗口中,
我可能不记得当前会话之前与你聊了什么东西。
我想通过这样的一个 skill,你来快速地总结相关的信息,
提炼其中的核心内容,并告诉我关联的,比如 git 提交、相关文件、
相关影响的外部流程……
text
名字随便取,dowhat(做了什么)语义直白。创建完成后 skill 落在 ai-chat-ui/.claude/skills/dowhat/SKILL.md。
生效条件与使用流程
skill 是会话启动时加载的,当前会话里新建的 skill 不会热生效,标准流程三步:
- 退出当前会话,终端会打印一个 resume ID,复制下来
claude --resume <id>恢复会话(恢复的同时加载了新 skill,上下文不丢)/dowhat执行总结
skill 做了什么:只读收集 + 结构化输出
skill 的核心是并行收集信息、只读不写。执行步骤固化在 SKILL.md 里:
第一步:并行收集(一组只读命令 + 记忆检索):
git branch --show-current # 当前分支
git status --short # 工作区状态
git log --oneline --decorate -15 --format="%h %ad %s" --date=short
# 近期提交
git diff --stat HEAD # 未提交变更统计
git ls-files --others --exclude-standard
# 未跟踪文件
bash
同时搜索 claude-mem 记忆(如果可用),按时间倒序取最近记录;用 gh pr list / gh issue list 查关联的 PR 和 Issue。
第二步:分析关联——从 git log 和记忆里提取已完成的功能、当前分支的目标(从分支名推断)、哪些包被修改、未完成的工作(未提交变更、TODO)、monorepo 里受影响的下游包(从 workspace 依赖推断)。
第三步:输出结构化报告:
> {用 1-2 句话概括当前工作状态和下一步} ← 一句话摘要必须放最前面
## 工作上下文回顾
**分支**: {branch} | **项目**: {project_name}
### 本次会话的提交 ← 只展示与当前会话相关的提交,不罗列全部近期提交
- `{hash}` {date} — {message}
### 当前工作状态
- 进行中的任务 / 未提交变更 X 个文件 / 未跟踪文件 X 个
### 关联文件
- `path/to/key/file.ts` — {简要说明变更内容}
### 外部关联
- GitHub Issues / Pull Requests / 影响的下游模块
### 待处理事项
- [ ] {未提交的变更需要提交}
- [ ] {未完成的 TODO}
text
在本项目里的实际输出长这样:今日 8 个提交、累计 29 个新组件、1 个 composable、2 个 units、6 个文档页、4 个包构建成功的记录;当前工作区干净、无未提交修改;关联文件列出全部 29 个组件的源码目录。一眼就能接上之前的进度。
按效果迭代 skill
第一版输出不对味就改 SKILL.md,两次真实迭代:
- 一句话总结移到最前面——原始报告把它埋在末尾,翻半天才能看到核心信息
- 只展示与当前会话相关的提交——
git log -15会把无关的历史提交全部列出来,噪音大;改为通过 claude-mem 的会话时间范围或对话上下文筛选
输出太长时可以要求它"输出到一个 .md 文件中",把报告落盘而不是刷屏。skill 的提示词就是随用随改的活文档,按你自己的需求改造即可。
双击 Esc:把跑偏的会话拉回来
另一个必备技巧:模型回复完一堆你不想留在上下文里的内容(比如刚才的总结报告),快速按两次 Esc,会话回退到执行 /dowhat 之前的位置,两种选择:
- restore conversation:整个会话回到执行命令前的状态,报告从上下文里消失
- summarize:从该点做摘要压缩继续
这个操作在开发中的用途更广:AI 的执行方向和预期不一致时(比如调研时输出了十份文档而约定只要一份),双击 Esc 回退比让AI删文件、再解释一遍省得多。
什么时候需要这个 skill
- 多窗口并行开发,切回某个窗口想快速恢复上下文
- 长任务执行数小时后回来确认进度(做了什么、工作区是否干净、还剩什么)
- 接手别人的会话或隔天继续自己的会话
配合两个既有习惯使用:每完成一个功能就 commit(dowhat 的报告以 git 状态为事实来源,不提交的改动在报告里都是"未完成");claude-mem 开着(会话时间范围的筛选依赖记忆检索)。
↑